home *** CD-ROM | disk | FTP | other *** search
- #include <stdlib.h>
-
- /************************************************************************/
-
- /* sample compar function: int cmp(void *a,void *b){ return *(int *)a-*(int *)b; } */
-
- void *bsearch (const void *key,const void *base,size_t nmemb,size_t size, int (*compar)(const void *,const void *))
-
- {
- char *base2;
- size_t a;
- size_t b;
- size_t c;
- int d;
-
- base2=(char *)base;
- a=0;
- b=nmemb;
- if (nmemb!=0)
- {
- while (1)
- {
- c=(a+b)/2;
- if ((d=(*compar)(key,&base2[size*c]))==0)
- {
- return &base2[size*c];
- }
- if (c==a)
- {
- break;
- }
- if (d<0)
- {
- b=c;
- }
- else
- {
- a=c;
- }
- }
- }
- return NULL;
- }
-